package com.wzy.media.service;

import com.wzy.base.model.PageParams;
import com.wzy.base.model.PageResult;
import com.wzy.base.model.RestResponse;
import com.wzy.media.model.dto.QueryMediaParamsDto;
import com.wzy.media.model.dto.UploadFileParamsDto;
import com.wzy.media.model.dto.UploadFileResultDto;
import com.wzy.media.model.po.MediaFiles;

import java.io.File;

/**
 * @Author wzy
 * @Date 2024/1/11 20:16
 * @description: 媒资文件管理业务接口
 */
public interface MediaFileService {
    /**
     * 分页查询媒资文件
     * @param companyId 机构id
     * @param pageParams 分页参数
     * @param queryMediaParamsDto 查询条件
     * @return
     */
    PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

    /**
     * 文件上传
     *
     * @param companyId           机构id
     * @param uploadFileParamsDto 上传的文件信息
     * @param localFilePath       本地路径
     * @param objectName
     * @return
     */
    UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto, String localFilePath,String objectName);

    /**
     * 文件保存到数据库
     * @param companyId
     * @param fileMd5
     * @param uploadFileParamsDto
     * @param bucketFiles
     * @param objectName
     * @return
     */
    MediaFiles addMediaFilesToDb(Long companyId, String fileMd5, UploadFileParamsDto uploadFileParamsDto, String bucketFiles, String objectName);

    /**
     * 检查文件是否存在 存在则不重复上传
     * @param fileMd5 文件的Md5值
     * @return
     */
    RestResponse<Boolean> checkFile(String fileMd5);

    /**
     * 检查分块文件是否存在 用于断点续传
     * @param fileMd5 分块的MD5值
     * @param chunk 分块序号
     * @return
     */
    RestResponse<Boolean> checkChunk(String fileMd5,int chunk);

    /**
     * 上传分块文件
     * @param fileMd5 上传分块的MD5值
     * @param chunk 分块序号
     * @param localChunkFilePath 分块的本地路径
     * @return
     */
    RestResponse<Boolean> uploadChunk(String fileMd5,int chunk,String localChunkFilePath);

    /**
     * @description 合并分块
     * @param companyId  机构id
     * @param fileMd5  文件md5
     * @param chunkTotal 分块总和
     * @param uploadFileParamsDto 文件信息
     * @return
     */
    RestResponse<Boolean> mergeChunks(Long companyId,String fileMd5,int chunkTotal,UploadFileParamsDto uploadFileParamsDto);

    /**
     * 从Minio中下载文件
     * @param bucketVideo
     * @param mergeFilePath
     * @return
     */
    File downloadFileFromMinIO(String bucketVideo, String mergeFilePath);

    /**
     * 将文件上传到minio
     * @param localFilePath 文件本地路径
     * @param mimeType 文件类型
     * @param bucket minio桶
     * @param objectName 文件minio存储路径
     * @return
     */
     boolean addMediaFilesToMinIO(String localFilePath, String mimeType, String bucket, String objectName);

    /**
     * 根据id查询媒资
     * @param mediaId
     * @return
     */
    MediaFiles getFileById(String mediaId);

    /**
     * 删除媒资文件
     * @param mediaId 媒资id
     */
    void deleteFileByMediaId(String mediaId);
}
